AIC average by age group

Run regressions between model parameters and age

## 
## Call:
## lm(formula = LL ~ age, data = model_params)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -154.578  -58.515    9.859   54.104  200.722 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -215.354     19.598  -10.99   <2e-16 ***
## age            1.591      1.170    1.36    0.176    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 72.28 on 148 degrees of freedom
## Multiple R-squared:  0.01235,    Adjusted R-squared:  0.005673 
## F-statistic:  1.85 on 1 and 148 DF,  p-value: 0.1758
## 
## Call:
## lm(formula = alphaPosChoice ~ age, data = model_params)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.3090 -0.1999 -0.0917  0.1265  0.6863 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.320756   0.074344   4.314 2.91e-05 ***
## age         -0.001369   0.004438  -0.308    0.758    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2742 on 148 degrees of freedom
## Multiple R-squared:  0.0006424,  Adjusted R-squared:  -0.00611 
## F-statistic: 0.09514 on 1 and 148 DF,  p-value: 0.7582
## 
## Call:
## lm(formula = alphaNegChoice ~ age, data = model_params)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.20679 -0.12581 -0.06585  0.00345  0.81559 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.304868   0.061239   4.978 1.76e-06 ***
## age         -0.011916   0.003656  -3.260  0.00138 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2259 on 148 degrees of freedom
## Multiple R-squared:  0.06698,    Adjusted R-squared:  0.06068 
## F-statistic: 10.62 on 1 and 148 DF,  p-value: 0.001385
## 
## Call:
## lm(formula = alphaPosComp ~ age, data = model_params)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.23170 -0.17898 -0.12042  0.05715  0.87437 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.300954   0.073408   4.100  6.8e-05 ***
## age         -0.007638   0.004382  -1.743   0.0834 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2707 on 148 degrees of freedom
## Multiple R-squared:  0.02012,    Adjusted R-squared:  0.01349 
## F-statistic: 3.038 on 1 and 148 DF,  p-value: 0.08341
## 
## Call:
## lm(formula = alphaNegComp ~ age, data = model_params)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.2432 -0.2170 -0.1918  0.2049  0.7903 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  0.270545   0.088504   3.057  0.00265 **
## age         -0.003096   0.005284  -0.586  0.55877   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3264 on 148 degrees of freedom
## Multiple R-squared:  0.002315,   Adjusted R-squared:  -0.004426 
## F-statistic: 0.3434 on 1 and 148 DF,  p-value: 0.5588
## 
## Call:
## lm(formula = betaAgency ~ age, data = model_params)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -9.158 -4.012 -1.747  2.933 20.338 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  3.53843    1.51875   2.330  0.02117 * 
## age          0.24547    0.09067   2.707  0.00758 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.601 on 148 degrees of freedom
## Multiple R-squared:  0.04719,    Adjusted R-squared:  0.04075 
## F-statistic:  7.33 on 1 and 148 DF,  p-value: 0.007579
## 
## Call:
## lm(formula = betaMachine ~ age, data = model_params)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -7.833 -3.151 -1.048  1.911 22.856 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   4.9326     1.3383   3.686 0.000319 ***
## age           0.1402     0.0799   1.755 0.081273 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.936 on 148 degrees of freedom
## Multiple R-squared:  0.02039,    Adjusted R-squared:  0.01378 
## F-statistic: 3.081 on 1 and 148 DF,  p-value: 0.08127
## 
## Call:
## lm(formula = agencyBonus ~ age, data = model_params)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.72271 -0.30021 -0.19730  0.08013  2.37437 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.72607    0.18718   3.879 0.000157 ***
## age         -0.01312    0.01117  -1.174 0.242346    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6904 on 148 degrees of freedom
## Multiple R-squared:  0.009224,   Adjusted R-squared:  0.00253 
## F-statistic: 1.378 on 1 and 148 DF,  p-value: 0.2423

Plot relations between model parameters and age

Parameter summary statistics

Beta model

## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: estimate ~ ageZ * betaType + (1 | subject_id)
## Data: betas
##          Effect        df      F p.value
## 1          ageZ 1, 148.00 6.75 *    .010
## 2      betaType 1, 148.00   0.45    .503
## 3 ageZ:betaType 1, 148.00   1.55    .216
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: estimate ~ ageZ * betaType + (1 | subject_id)
##    Data: data
## 
## REML criterion at convergence: 1803.2
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -1.9989 -0.5011 -0.1486  0.4083  3.2037 
## 
## Random effects:
##  Groups     Name        Variance Std.Dev.
##  subject_id (Intercept) 14.21    3.770   
##  Residual               13.66    3.696   
## Number of obs: 300, groups:  subject_id, 150
## 
## Fixed effects:
##                Estimate Std. Error       df t value Pr(>|t|)    
## (Intercept)      7.3161     0.3745 148.0000  19.534   <2e-16 ***
## ageZ             0.9745     0.3752 148.0000   2.597   0.0103 *  
## betaType1        0.1433     0.2134 148.0000   0.672   0.5028    
## ageZ:betaType1   0.2658     0.2137 148.0000   1.244   0.2155    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) ageZ  btTyp1
## ageZ        0.000              
## betaType1   0.000  0.000       
## ageZ:btTyp1 0.000  0.000 0.000
Predictor Estimates SE Statistic p
intercept 7.32 0.37 19.53 <0.001
age 0.97 0.38 2.60 0.010
decision stage 0.14 0.21 0.67 0.502
age x decision stage 0.27 0.21 1.24 0.215

Learning rate model

## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: estimate ~ age_z * valence * agency + (1 | subject_id)
## Data: learning_rates
##                 Effect        df         F p.value
## 1                age_z 1, 148.00    5.38 *    .022
## 2              valence 1, 444.00 11.17 ***   <.001
## 3               agency 1, 444.00      0.10    .753
## 4        age_z:valence 1, 444.00      0.51    .477
## 5         age_z:agency 1, 444.00      0.09    .762
## 6       valence:agency 1, 444.00 28.34 ***   <.001
## 7 age_z:valence:agency 1, 444.00    3.20 +    .074
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: estimate ~ age_z * valence * agency + (1 | subject_id)
##    Data: data
## 
## REML criterion at convergence: 199.6
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -1.5327 -0.6127 -0.3271  0.2431  3.2261 
## 
## Random effects:
##  Groups     Name        Variance Std.Dev.
##  subject_id (Intercept) 0.008624 0.09287 
##  Residual               0.067885 0.26055 
## Number of obs: 600, groups:  subject_id, 150
## 
## Fixed effects:
##                          Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)              0.203361   0.013063 148.000000  15.568  < 2e-16 ***
## age_z                   -0.030316   0.013074 148.000000  -2.319   0.0218 *  
## valence1                -0.035555   0.010637 444.000000  -3.343   0.0009 ***
## agency1                  0.003345   0.010637 444.000000   0.314   0.7533    
## age_z:valence1          -0.007579   0.010646 444.000000  -0.712   0.4769    
## age_z:agency1           -0.003219   0.010646 444.000000  -0.302   0.7625    
## valence1:agency1        -0.056629   0.010637 444.000000  -5.324 1.62e-07 ***
## age_z:valence1:agency1  -0.019045   0.010646 444.000000  -1.789   0.0743 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) age_z valnc1 agncy1 ag_z:v1 ag_z:g1 vln1:1
## age_z       0.000                                            
## valence1    0.000  0.000                                     
## agency1     0.000  0.000 0.000                               
## age_z:vlnc1 0.000  0.000 0.000  0.000                        
## age_z:gncy1 0.000  0.000 0.000  0.000  0.000                 
## vlnc1:gncy1 0.000  0.000 0.000  0.000  0.000   0.000         
## ag_z:vln1:1 0.000  0.000 0.000  0.000  0.000   0.000   0.000
## 
##  Paired t-test
## 
## data:  model_params$alphaPosChoice and model_params$alphaNegChoice
## t = 6.9666, df = 149, p-value = 9.73e-11
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  0.1320728 0.2366607
## sample estimates:
## mean difference 
##       0.1843667
## 
##  Paired t-test
## 
## data:  model_params$alphaPosComp and model_params$alphaNegComp
## t = -1.1108, df = 149, p-value = 0.2685
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -0.11712714  0.03283236
## sample estimates:
## mean difference 
##     -0.04214739
Predictor Estimates SE Statistic p
intercept 0.20 0.01 15.57 <0.001
age -0.03 0.01 -2.32 0.021
valence -0.04 0.01 -3.34 0.001
agency 0.00 0.01 0.31 0.753
age x valence -0.01 0.01 -0.71 0.477
age x agency -0.00 0.01 -0.30 0.762
valence x agency -0.06 0.01 -5.32 <0.001
age x valence x agency -0.02 0.01 -1.79 0.074

Learning rate plot

Relation between parameter estimates and ‘model-free’ regressions

## 
## Call:
## lm(formula = `(Intercept)` ~ agencyBonus, data = voc_REs_RL)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.9134 -0.6544  0.0318  0.7376  5.8069 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -1.2960     0.1436  -9.025 8.77e-16 ***
## agencyBonus   2.4096     0.1668  14.449  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.407 on 148 degrees of freedom
## Multiple R-squared:  0.5852, Adjusted R-squared:  0.5824 
## F-statistic: 208.8 on 1 and 148 DF,  p-value: < 2.2e-16
## 
## Call:
## lm(formula = voc_z ~ betaAgency, data = voc_REs_RL)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.13455 -0.22221 -0.03153  0.14601  1.68526 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.779560   0.049299  -15.81   <2e-16 ***
## betaAgency   0.102000   0.005251   19.42   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3666 on 148 degrees of freedom
## Multiple R-squared:  0.7182, Adjusted R-squared:  0.7163 
## F-statistic: 377.3 on 1 and 148 DF,  p-value: < 2.2e-16
## 
## Call:
## lm(formula = voc_z ~ betaAgency + age, data = voc_REs_RL)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.16014 -0.23331 -0.02059  0.18482  1.67324 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.967014   0.099995  -9.671   <2e-16 ***
## betaAgency   0.099521   0.005315  18.723   <2e-16 ***
## age          0.012893   0.006006   2.147   0.0335 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3622 on 147 degrees of freedom
## Multiple R-squared:  0.7268, Adjusted R-squared:  0.7231 
## F-statistic: 195.5 on 2 and 147 DF,  p-value: < 2.2e-16
## 
## Call:
## lm(formula = voc_z ~ betaAgency + betaMachine, data = voc_REs_RL)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.13574 -0.23276 -0.02974  0.13115  1.68646 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.786072   0.056240 -13.977   <2e-16 ***
## betaAgency   0.101204   0.006202  16.319   <2e-16 ***
## betaMachine  0.001736   0.007136   0.243    0.808    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3678 on 147 degrees of freedom
## Multiple R-squared:  0.7184, Adjusted R-squared:  0.7145 
## F-statistic: 187.5 on 2 and 147 DF,  p-value: < 2.2e-16
LS0tCnRpdGxlOiAiRTIgVm9DIEFuYWx5c2VzIFBhcnQgMzogUkwgQW5hbHlzZXMiCmRhdGU6IDMvMjcvMjQKb3V0cHV0OgogICAgaHRtbF9kb2N1bWVudDoKICAgICAgICBkZl9wcmludDogJ3BhZ2VkJwogICAgICAgIHRvYzogdHJ1ZQogICAgICAgIHRvY19mbG9hdDoKICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICAgICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQogICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQotLS0KCmBgYHtyIGNodW5rIHNldHRpbmdzLCBpbmNsdWRlID0gRkFMU0V9CiMgc2V0IGNodW5rIHNldHRpbmdzCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZHBpPTYwMCkKa25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBycHJvanJvb3Q6OmZpbmRfcnN0dWRpb19yb290X2ZpbGUoKSkKYGBgCgpgYGB7ciBsb2FkIGxpYnJhcmllcywgaW5jbHVkZSA9IEZ9CgojbG9hZCBsaWJyYXJpZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2x1ZSkKbGlicmFyeShhZmV4KQpsaWJyYXJ5KGxhdGV4MmV4cCkKbGlicmFyeShzalBsb3QpCgojbG9hZCBzY3JpcHRzCnNvdXJjZSgnYW5hbHlzaXNfc2NyaXB0cy92b2NfZnVuY3Rpb25zLlInKQpgYGAKCmBgYHtyIGltcG9ydCBkYXRhfQojIHJlYWQgaW4gcGFydGljaXBhbnQgYWdlcwpwYXJ0aWNpcGFudF9hZ2VzIDwtIHJlYWRfY3N2KCdkYXRhL3ZvY19zdWJfaW5mby5jc3YnKSAKCiMjIHJlYWQgaW4gYWljcwphaWNzID0gcmVhZF9jc3YoIlJMX21vZGVsaW5nL291dHB1dC9haWNzX2FsbF8xNl9tb2RlbHNfMTAwaXRlci5jc3YiKSAlPiUKICByZW5hbWUoc3ViamVjdF9pZCA9IHN1YklEKQoKIyBjb21iaW5lIHdpdGggYWdlcwphaWNzIDwtIGlubmVyX2pvaW4oYWljcywgcGFydGljaXBhbnRfYWdlcywgYnkgPSAnc3ViamVjdF9pZCcpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSBjYXNlX3doZW4oYWdlIDwgMTMgfiAiQ2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlID4gMTIuOTkgJiBhZ2UgPCAxOCB+ICJBZG9sZXNjZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPiAxNy45OSB+ICJBZHVsdHMiKSkKCmFpY3MkYWdlX2dyb3VwIDwtIGZhY3RvcihhaWNzJGFnZV9ncm91cCwgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCiAgICAgICAgIAoKI3Bpdm90IGxvbmdlcgptb2RlbF9yZXN1bHRzIDwtIHBpdm90X2xvbmdlcihhaWNzLCAKICAgICAgICAgICAgICAgICAgICAgIGNvbHMgPSBvbmVBbHBoYV9vbmVCZXRhOmZvdXJBbHBoYV90d29CZXRhX2FnZW5jeUJvbnVzLAogICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIkFJQyIpCgoKbW9kZWxfcmVzdWx0cyRtb2RlbCA8LSBmYWN0b3IobW9kZWxfcmVzdWx0cyRtb2RlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm9uZUFscGhhX29uZUJldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmVBbHBoYV90d29CZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvQWxwaGFfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYVZhbGVuY2VkX29uZUJldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYVZhbGVuY2VkX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VyQWxwaGFfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdXJBbHBoYV90d29CZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25lQWxwaGFfb25lQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uZUFscGhhX3R3b0JldGFfYWdlbmN5Qm9udXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYV9vbmVCZXRhX2FnZW5jeUJvbnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvQWxwaGFfdHdvQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhVmFsZW5jZWRfb25lQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhVmFsZW5jZWRfdHdvQmV0YV9hZ2VuY3lCb251cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvdXJBbHBoYV9vbmVCZXRhX2FnZW5jeUJvbnVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91ckFscGhhX3R3b0JldGFfYWdlbmN5Qm9udXMiKSkKbW9kZWxfcmVzdWx0cyA8LSBtb2RlbF9yZXN1bHRzICU+JQogIG11dGF0ZShhZ2VuY3lCb251cyA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KG1vZGVsLCAiYWdlbmN5IikgfiAiV2l0aCBBZ2VuY3kgQm9udXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3RyX2RldGVjdChtb2RlbCwgImFnZW5jeSIpIH4gIk5vIEFnZW5jeSBCb251cyIpLAogICAgICAgICBzaG9ydE5hbWUgPSBzdHJfcmVtb3ZlKG1vZGVsLCAnX2FnZW5jeUJvbnVzJykpCgptb2RlbF9yZXN1bHRzJHNob3J0TmFtZSA8LSBmYWN0b3IobW9kZWxfcmVzdWx0cyRzaG9ydE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJvbmVBbHBoYV9vbmVCZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uZUFscGhhX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvQWxwaGFfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYV90d29CZXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b0FscGhhVmFsZW5jZWRfb25lQmV0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d29BbHBoYVZhbGVuY2VkX3R3b0JldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91ckFscGhhX29uZUJldGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm91ckFscGhhX3R3b0JldGEiKSkKYGBgCgojICBBSUMgYXZlcmFnZSBieSBhZ2UgZ3JvdXAgCmBgYHtyIHBsb3QgQUlDIGJ5IGFnZSBncm91cCwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDUsIHVuaXRzID0gImluIn0KI3N1bW1hcml6ZQptb2RlbF9zdW1tYXJ5IDwtIG1vZGVsX3Jlc3VsdHMgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBzaG9ydE5hbWUsIGFnZW5jeUJvbnVzKSAlPiUKICBzdW1tYXJpemUobWVhbl9haWMgPSBtZWFuKEFJQykpCgojIyBQbG90IHRoZSByZXN1bHRzIGJ5IGFnZSBncm91cCAKQUlDX2FnZV9wbG90IDwtIGdncGxvdChtb2RlbF9zdW1tYXJ5LCBhZXMoeCA9IGFnZV9ncm91cCwgeSA9IG1lYW5fYWljLCBmaWxsID0gc2hvcnROYW1lKSkrCiAgZmFjZXRfd3JhcCh+YWdlbmN5Qm9udXMpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9maWxsX21hbnVhbChuYW1lID0gIk1vZGVsIiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKGNvbG9yOCwgY29sb3IxLCBjb2xvcjIsIGNvbG9yMywgY29sb3I0LCBjb2xvcjUsIGNvbG9yNiwgY29sb3I3LCBjb2xvcjEpLAogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICBjKFRlWCgnJG9uZVxcYWxwaGFcXF9vbmVcXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyRvbmVcXGFscGhhXFxfdHdvXFxiZXRhJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVYKCckdHdvQ2hvaWNlXFxhbHBoYVxcX29uZVxcYmV0YScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgnJHR3b0Nob2ljZVxcYWxwaGFcXF90d29cXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyR0d29WYWxlbmNlZFxcYWxwaGFcXF9vbmVcXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyR0d29WYWxlbmNlZFxcYWxwaGFcXF90d29cXGJldGEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoJyRmb3VyXFxhbHBoYVxcX29uZVxcYmV0YScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgnJGZvdXJcXGFscGhhXFxfdHdvXFxiZXRhJykpKSArIAogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygzNTAsIDY1MCkpICsKICB5bGFiKCJNZWFuIEFJQyIpICsKICB4bGFiKCIiKSArCiAgdm9jX3RoZW1lKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpCkFJQ19hZ2VfcGxvdApgYGAKCgojICBFeGFtaW5lIGFnZS1yZWxhdGVkIGNoYW5nZSBpbiBwYXJhbWV0ZXIgZXN0aW1hdGVzIGZyb20gbW9kZWxzCmBgYHtyIGxvYWQgcGFyYW1ldGVycyBmcm9tIHdpbm5pbmcgbW9kZWx9Cm1vZGVsX3BhcmFtcyA8LSByZWFkX2NzdigiUkxfbW9kZWxpbmcvb3V0cHV0L21vZGVsX2ZpdHNfcmVhbF9kYXRhL2ZvdXJBbHBoYV90d29CZXRhX2FnZW5jeUJvbnVzLmNzdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjKCJuZWdMTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dQb3N0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFJQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCSUMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGFQb3NDaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGFOZWdDaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGFQb3NDb21wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhTmVnQ29tcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZXRhQWdlbmN5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJldGFNYWNoaW5lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFnZW5jeUJvbnVzIikpCgojYWRkIHN1YiBJRCBhbmQgaW5mb3JtYXRpb24Kc3ViamVjdF9pZCA8LSBtb2RlbF9yZXN1bHRzICU+JSBzZWxlY3Qoc3ViamVjdF9pZCkgJT4lIHVuaXF1ZSgpCm1vZGVsX3BhcmFtcyA8LSBiaW5kX2NvbHMoc3ViamVjdF9pZCwgbW9kZWxfcGFyYW1zKQptb2RlbF9wYXJhbXMgPC0gaW5uZXJfam9pbihwYXJ0aWNpcGFudF9hZ2VzLCBtb2RlbF9wYXJhbXMsIGJ5ID0gYygic3ViamVjdF9pZCIpKQoKYGBgCgoKIyBSdW4gcmVncmVzc2lvbnMgYmV0d2VlbiBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBhZ2UKYGBge3IgcGFyYW1ldGVyIHJlZ3Jlc3Npb25zfQptb2RlbF9wYXJhbXMkTEwgPC0gbW9kZWxfcGFyYW1zJG5lZ0xMICogLTEKCiMgTG9nIGxpa2VsaWhvb2QKc3VtbWFyeShsbShMTCB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiMgbm90IHNpZ25pZmljYW50CgojIEFscGhhIFBvcyBDaG9pY2UKc3VtbWFyeShsbShhbHBoYVBvc0Nob2ljZSB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiNub3Qgc2lnbmlmaWNhbnQKCiMgQWxwaGEgTmVnIENob2ljZQpzdW1tYXJ5KGxtKGFscGhhTmVnQ2hvaWNlIH4gYWdlLCBkYXRhID0gbW9kZWxfcGFyYW1zKSkKIyBzaWduaWZpY2FudAoKIyBBbHBoYSBQb3MgQ29tcApzdW1tYXJ5KGxtKGFscGhhUG9zQ29tcCB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiNub3Qgc2lnbmlmaWNhbnQKCiMgQWxwaGEgTmVnIENvbXAKc3VtbWFyeShsbShhbHBoYU5lZ0NvbXAgfiBhZ2UsIGRhdGEgPSBtb2RlbF9wYXJhbXMpKQojbm90IHNpZ25pZmljYW50CgojIEJldGEgQWdlbmN5CnN1bW1hcnkobG0oYmV0YUFnZW5jeSB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiMgc2lnbmlmaWNhbnQKCiMgQmV0YSBCYW5kaXQKc3VtbWFyeShsbShiZXRhTWFjaGluZSB+IGFnZSwgZGF0YSA9IG1vZGVsX3BhcmFtcykpCiMgbm90IHNpZ25pZmljYW50CgojIGFnZW5jeSBib251cwpzdW1tYXJ5KGxtKGFnZW5jeUJvbnVzIH4gYWdlLCBkYXRhID0gbW9kZWxfcGFyYW1zKSkKIyBub3Qgc2lnbmlmaWNhbnQKCmBgYAoKCgojIFBsb3QgcmVsYXRpb25zIGJldHdlZW4gbW9kZWwgcGFyYW1ldGVycyBhbmQgYWdlCmBgYHtyIGFnZSBwYXJhbWV0ZXIgcGxvdCwgZmlnLndpZHRoID0gNywgZmlnLmhlaWdodCA9IDQsIHVuaXRzID0gImluIn0KCnBhcmFtc19sb25nIDwtIG1vZGVsX3BhcmFtcyAlPiUKICBwaXZvdF9sb25nZXIobmFtZXNfdG8gPSAicGFyYW0iLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZXN0aW1hdGUiLAogICAgICAgICAgICAgICBjb2xzID0gYyhhbHBoYVBvc0Nob2ljZTphZ2VuY3lCb251cykpIAoKcGFyYW1zX2xvbmckcGFyYW0gPC0gZmFjdG9yKHBhcmFtc19sb25nJHBhcmFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImFscGhhUG9zQ2hvaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhTmVnQ2hvaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhUG9zQ29tcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBoYU5lZ0NvbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmV0YUFnZW5jeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZXRhTWFjaGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZ2VuY3lCb251cyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhUZVgoIiRcXGFscGhhX3tjaG9pY2VfK30kIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoIiRcXGFscGhhX3tjaG9pY2VfLX0kIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZVgoIiRcXGFscGhhX3tjb21wXyt9JCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVYKCIkXFxhbHBoYV97Y29tcF8tfSQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgiJFxcYmV0YV97YWdlbmN5fSQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlWCgiJFxcYmV0YV97bWFjaGluZX0kIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZ2VuY3l+Qm9udXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQoKcGFyYW1zX3Bsb3QgPC0gZ2dwbG90KHBhcmFtc19sb25nLCBhZXMoeCA9IGFnZSwgeSA9IGVzdGltYXRlLCBjb2xvciA9IHBhcmFtKSkgKwogIGZhY2V0X3dyYXAofnBhcmFtLCBzY2FsZSA9ICJmcmVlIiwgbGFiZWxsZXIgPSBsYWJlbF9wYXJzZWQsIG5yb3cgPSAyKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhZXMoZmlsbCA9IHBhcmFtKSkgKwogIHlsYWIoIlBhcmFtZXRlciBFc3RpbWF0ZSIpICsKICB4bGFiKCJBZ2UiKSArCiAgdm9jX3RoZW1lKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGFyYW1zX3Bsb3QKYGBgCgoKIyBQYXJhbWV0ZXIgc3VtbWFyeSBzdGF0aXN0aWNzCmBgYHtyIHBhcmFtZXRlciBzdW1tYXJ5IHN0YXRzfQoKcGFyYW1fc3VtbWFyeSA8LSBwYXJhbXNfbG9uZyAlPiUKICAgIGdyb3VwX2J5KHBhcmFtKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuRXN0aW1hdGUgPSBtZWFuKGVzdGltYXRlKSwKICAgICAgICAgICAgc2VFc3RpbWF0ZSA9IHNkKGVzdGltYXRlKS9zcXJ0KG4oKSkpCnBhcmFtX3N1bW1hcnkKCmBgYAoKIyBCZXRhIG1vZGVsCmBgYHtyIGJldGEgcmVncmVzc2lvbn0KYmV0YXMgPC0gbW9kZWxfcGFyYW1zICU+JQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKGJldGFBZ2VuY3ksIGJldGFNYWNoaW5lKSwKICAgICAgICAgICAgICAgICBuYW1lc190byA9ICJiZXRhVHlwZSIsCiAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImVzdGltYXRlIikgJT4lCiAgICBzZWxlY3Qoc3ViamVjdF9pZCwgYWdlLCBiZXRhVHlwZSwgZXN0aW1hdGUpICU+JQogICAgdW5pcXVlKCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKYmV0YXMkYWdlWiA8LSBzY2FsZV90aGlzKGJldGFzJGFnZSkKCmJldGFfbW9kZWwgPC0gbWl4ZWQoZXN0aW1hdGUgfiBhZ2VaICogYmV0YVR5cGUgKyAoMXxzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmV0YXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiKQpiZXRhX21vZGVsCnN1bW1hcnkoYmV0YV9tb2RlbCkKCmBgYAoKYGBge3IgIGJldGEgcHJpbnQgbW9kZWwgc3RhdHN9CgpiZXRhX2xtZXIgPC0gbWl4ZWQoZXN0aW1hdGUgfiBhZ2VaICogYmV0YVR5cGUgKyAoMXxzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiZXRhcywKICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJTIiwKICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGJldGFfbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJhZ2UiLCAiZGVjaXNpb24gc3RhZ2UiLCAiYWdlIHggZGVjaXNpb24gc3RhZ2UiKSwKICAgICAgICAgIHRyYW5zZm9ybSA9IE5VTEwsCiAgICAgICAgICBzaG93LmVzdCA9IFQsIAogICAgICAgICAgc2hvdy5zZSA9IFQsIAogICAgICAgICAgc2hvdy5zdGF0ID0gVCwKICAgICAgICAgIHNob3cuY2kgPSBGLAogICAgICAgICAgc2hvdy5yZS52YXIgPSBGLAogICAgICAgICAgc2hvdy5pY2MgPSBGLAogICAgICAgICAgc2hvdy5uZ3JvdXBzID0gRiwKICAgICAgICAgIHNob3cub2JzID0gRiwKICAgICAgICAgIHNob3cucjIgPSBGLAogICAgICAgICAgc3RyaW5nLnNlID0gIlNFIiwKICAgICAgICAgIGVtcGgucCA9IEYsCiAgICAgICAgICBzdHJpbmcucHJlZCA9ICJQcmVkaWN0b3IiLAogICAgICAgICAgdGl0bGUgPSAiIiwKICAgICAgICAgIGR2LmxhYmVscyA9ICIiKQpgYGAKCiMgTGVhcm5pbmcgcmF0ZSBtb2RlbApgYGB7ciBsZWFybmluZyByYXRlIHJlZ3Jlc3Npb259CiMjIExlYXJuaW5nIHJhdGUgbW9kZWwKbGVhcm5pbmdfcmF0ZXMgPC0gbW9kZWxfcGFyYW1zICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhhbHBoYVBvc0Nob2ljZTphbHBoYU5lZ0NvbXApLAogICAgICAgICAgICAgICBuYW1lc190byA9ICJsZWFybmluZ1JhdGUiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZXN0aW1hdGUiKSAlPiUKICBzZWxlY3Qoc3ViamVjdF9pZCwgYWdlLCBsZWFybmluZ1JhdGUsIGVzdGltYXRlKSAlPiUKICB1bmlxdWUoKSAlPiUKICBtdXRhdGUodmFsZW5jZSA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIlBvcyIpIH4gIlBvc2l0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIk5lZyIpIH4gIk5lZ2F0aXZlIiksCiAgICAgICAgIGFnZW5jeSA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIkNob2ljZSIpIH4gIkNob2ljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGxlYXJuaW5nUmF0ZSwgIkNvbXAiKSB+ICJDb21wIikpCgpsZWFybmluZ19yYXRlcyRhZ2VfeiA8LSBzY2FsZV90aGlzKGxlYXJuaW5nX3JhdGVzJGFnZSkKCmxlYXJuaW5nX3JhdGVfbW9kZWwgPC0gbWl4ZWQoZXN0aW1hdGUgfiBhZ2VfeiAqIHZhbGVuY2UgKiBhZ2VuY3kgKyAoMXxzdWJqZWN0X2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbGVhcm5pbmdfcmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiKQpsZWFybmluZ19yYXRlX21vZGVsCnN1bW1hcnkobGVhcm5pbmdfcmF0ZV9tb2RlbCkKIyBtYWluIGVmZmVjdCBvZiBhZ2UKIyBtYWluIGVmZmVjdCBvZiB2YWxlbmNlCiMgdmFsZW5jZSB4IGFnZW5jeSBpbnRlcmFjdGlvbgoKCiN0IHRlc3QgYmV0d2VlbiBhbHBoYSBwb3MgY2hvaWNlIGFuZCBhbHBoYSBuZWcgY2hvaWNlCnQudGVzdChtb2RlbF9wYXJhbXMkYWxwaGFQb3NDaG9pY2UsIG1vZGVsX3BhcmFtcyRhbHBoYU5lZ0Nob2ljZSwgcGFpcmVkID0gVCkKI3NpZ25pZmljYW50CgojdCB0ZXN0IGJldHdlZW4gYWxwaGEgcG9zIGNvbXAgYW5kIGFscGhhIG5lZyBjb21wCnQudGVzdChtb2RlbF9wYXJhbXMkYWxwaGFQb3NDb21wLCBtb2RlbF9wYXJhbXMkYWxwaGFOZWdDb21wLCBwYWlyZWQgPSBUKQojbm90IHNpZ25pZmljYW50CgpgYGAKCgpgYGB7ciBsZWFybmluZyByYXRlIHByaW50IG1vZGVsIHN0YXRzfQoKbGVhcm5pbmdfcmF0ZV9sbWVyIDwtIG1peGVkKGVzdGltYXRlIH4gYWdlX3ogKiB2YWxlbmNlICogYWdlbmN5ICsgKDF8c3ViamVjdF9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGxlYXJuaW5nX3JhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGxlYXJuaW5nX3JhdGVfbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJhZ2UiLCAidmFsZW5jZSIsICJhZ2VuY3kiLCAiYWdlIHggdmFsZW5jZSIsICJhZ2UgeCBhZ2VuY3kiLCAidmFsZW5jZSB4IGFnZW5jeSIsICJhZ2UgeCB2YWxlbmNlIHggYWdlbmN5IiksCiAgICAgICAgICB0cmFuc2Zvcm0gPSBOVUxMLAogICAgICAgICAgc2hvdy5lc3QgPSBULCAKICAgICAgICAgIHNob3cuc2UgPSBULCAKICAgICAgICAgIHNob3cuc3RhdCA9IFQsCiAgICAgICAgICBzaG93LmNpID0gRiwKICAgICAgICAgIHNob3cucmUudmFyID0gRiwKICAgICAgICAgIHNob3cuaWNjID0gRiwKICAgICAgICAgIHNob3cubmdyb3VwcyA9IEYsCiAgICAgICAgICBzaG93Lm9icyA9IEYsCiAgICAgICAgICBzaG93LnIyID0gRiwKICAgICAgICAgIHN0cmluZy5zZSA9ICJTRSIsCiAgICAgICAgICBlbXBoLnAgPSBGLAogICAgICAgICAgc3RyaW5nLnByZWQgPSAiUHJlZGljdG9yIiwKICAgICAgICAgIHRpdGxlID0gIiIsCiAgICAgICAgICBkdi5sYWJlbHMgPSAiIikKYGBgCgojIyBMZWFybmluZyByYXRlIHBsb3QKYGBge3IgbGVhcm5pbmcgcmF0ZSBwbG90fQoKbGVhcm5pbmdfcmF0ZV9tZWFucyA8LSBsZWFybmluZ19yYXRlcyAlPiUKICAgIGdyb3VwX2J5KGFnZW5jeSwgdmFsZW5jZSkgJT4lCiAgICBzdW1tYXJpemUobWVhbkxSID0gbWVhbihlc3RpbWF0ZSksCiAgICAgICAgICAgICAgc2VMUiA9IHNkKGVzdGltYXRlKSAvIHNxcnQobigpKSkKCmxlYXJuaW5nX3JhdGVfcGxvdCA8LSBnZ3Bsb3QobGVhcm5pbmdfcmF0ZV9tZWFucywgYWVzKHggPSBhZ2VuY3ksIHkgPSBtZWFuTFIsIGZpbGwgPSB2YWxlbmNlKSkgKwogICAgZ2VvbV9iYXIoY29sb3IgPSAnYmxhY2snLCBzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArIAogICAgZ2VvbV9lcnJvcmJhcihjb2xvciA9ICJibGFjayIsIGFlcyh5bWluID0gbWVhbkxSIC0gc2VMUiwgeW1heCA9IG1lYW5MUiArIHNlTFIpLCB3aWR0aCA9IC4xLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKGNvbG9yMSwgY29sb3IyKSwgbmFtZSA9ICJWYWxlbmNlIikgKwogICAgeWxhYigiTWVhbiBMZWFybmluZyBSYXRlIikgKwogICAgeGxhYigiQWdlbmN5IikgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJQYXJ0aWNpcGFudCBDaG9pY2UiLCAiQ29tcHV0ZXIgQ2hvaWNlIikpICsKICAgIHZvY190aGVtZSgpCmxlYXJuaW5nX3JhdGVfcGxvdCAKYGBgCgoKCiMgUmVsYXRpb24gYmV0d2VlbiBwYXJhbWV0ZXIgZXN0aW1hdGVzIGFuZCAnbW9kZWwtZnJlZScgcmVncmVzc2lvbnMKYGBge3IgZG9lcyB0aGUgdm9jIGJ5IGFnZSBpbnRlcmFjdGlvbiBlZmZlY3QgcmVsYXRlIHRvIGJldGFBZ2VuY3l9CgojIFJlYWQgaW4gZGF0YQpsZWFybmluZ19kYXRhIDwtIHJlYWRfY3N2KCdkYXRhL3Byb2Nlc3NlZC9sZWFybmluZ19kYXRhLmNzdicpIAoKI2NvbWJpbmUgd2l0aCBwYXJ0aWNpcGFudCBhZ2UKbGVhcm5pbmdfZGF0YSA8LSBmdWxsX2pvaW4obGVhcm5pbmdfZGF0YSwgcGFydGljaXBhbnRfYWdlcywgYnkgPSBjKCJzdWJqZWN0X2lkIikpCgojcHJvY2VzcyAKbGVhcm5pbmdfZGF0YSA8LSBsZWFybmluZ19kYXRhICU+JQogIG11dGF0ZShldl9jaG9pY2UgPSBjYXNlX3doZW4oY29udGV4dCA9PSAwIH4gOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPT0gMSB+IDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID09IDIgfiA1KSwKICAgICAgICAgZXZfY29tcCA9IDUgKyBvZmZlciwKICAgICAgICAgdm9jID0gZXZfY2hvaWNlIC0gZXZfY29tcCwKICAgICAgICAgYmV0dGVyX21hY2hpbmUgPSBjYXNlX3doZW4ocmV3YXJkX3Byb2JfTCA+IHJld2FyZF9wcm9iX1IgfiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdhcmRfcHJvYl9MIDwgcmV3YXJkX3Byb2JfUiB+IDAsCiAgICAgICAgICksCiAgICAgICAgIHN0YWdlXzJfYWNjID0gY2FzZV93aGVuKHN0YWdlXzJfY2hvaWNlID09IGJldHRlcl9tYWNoaW5lIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2VfMl9jaG9pY2UgIT0gYmV0dGVyX21hY2hpbmUgfiAwKSkgJT4lCiAgZ3JvdXBfYnkoc3ViamVjdF9pZCwgY29udGV4dCkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbl90cmlhbCA9IHJhbmsodHJpYWwpLAogICAgICAgICBibG9jayA9IGZsb29yKCh0cmlhbC0xKS8yMSArIDEpKQoKIyBleGNsdWRlIGZpcnN0LXN0YWdlIG1pc3NlcyBhbmQgZmlyc3Qtc3RhZ2UgUlQgPCAxNTAgbXMKbGVhcm5pbmdfZGF0YV9maWx0ZXJlZCA8LSBsZWFybmluZ19kYXRhICU+JQogIGZpbHRlcihzdGFnZV8xX3J0ID4gMTUwKQoKI2dldCBhZ2VuY3kgbW9kZWwgZGF0YQphZ2VuY3lfbW9kZWxfZGF0YSA8LSBsZWFybmluZ19kYXRhX2ZpbHRlcmVkICU+JQogIHNlbGVjdChzdWJqZWN0X2lkLCBzdGFnZV8xX2Nob2ljZSwgdm9jLCBjb25kaXRpb25fdHJpYWwsIGJsb2NrLCB0cmlhbCwgYWdlKQoKIyMgUkVHUkVTU0lPTiBNT0RFTCAjIwojeiBzY29yZSBjb250aW51b3VzIHZhcmlhYmxlcwphZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkIDwtIGZhY3RvcihhZ2VuY3lfbW9kZWxfZGF0YSRzdWJqZWN0X2lkKQphZ2VuY3lfbW9kZWxfZGF0YSR2b2NfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJHZvYykKYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsIDwtIHNjYWxlX3RoaXMoYWdlbmN5X21vZGVsX2RhdGEkY29uZGl0aW9uX3RyaWFsKQphZ2VuY3lfbW9kZWxfZGF0YSRhZ2VfeiA8LSBzY2FsZV90aGlzKGFnZW5jeV9tb2RlbF9kYXRhJGFnZSkKCiMgcHJlZGljdCBhZ2VuY3kgY2hvaWNlIGZyb20gdXRpbGl0eSBvZiBjb250cm9sLCB0cmlhbCwgbGluZWFyIGFnZQphZ2VuY3lfYnlWT0NUcmlhbEFnZS5nbG1lciA9IG1peGVkKHN0YWdlXzFfY2hvaWNlIH4gdm9jX3ogKiBjb25kaXRpb25fdHJpYWwgKyAodm9jX3ogKiBjb25kaXRpb25fdHJpYWwgfCBzdWJqZWN0X2lkKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhZ2VuY3lfbW9kZWxfZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLCAKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkxSVCIsIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIixvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpLAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikgCgojZ2V0IHJhbmRvbSBlZmZlY3RzCnZvY19SRXMgPC0gcmFuZWYoYWdlbmN5X2J5Vk9DVHJpYWxBZ2UuZ2xtZXIpJHN1YmplY3RfaWQgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInN1YmplY3RfaWQiKQoKdm9jX1JFcyRzdWJqZWN0X2lkIDwtIGFzLm51bWVyaWModm9jX1JFcyRzdWJqZWN0X2lkKQoKI2NvbWJpbmUgd2l0aCBSTCBlc3RpbWF0ZXMKdm9jX1JFc19STCA8LSBmdWxsX2pvaW4odm9jX1JFcywgbW9kZWxfcGFyYW1zLCBieSA9ICdzdWJqZWN0X2lkJykKCmBgYAoKCmBgYHtyIHJ1biBSRSBhbmQgcGFyYW1ldGVyIHJlZ3Jlc3Npb25zfQoKI3J1biByZWdyZXNzaW9ucwoKI2FnZW5jeSBib251cwp2b2NfUkVfYWdlbmN5Qm9udXMubG0gPC0gbG0oYChJbnRlcmNlcHQpYCB+IGFnZW5jeUJvbnVzLCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYWdlbmN5Qm9udXMubG0pCgojYmV0YSBhZ2VuY3kKdm9jX1JFX2JldGFBZ2VuY3kubG0gPC0gbG0odm9jX3ogfiBiZXRhQWdlbmN5LCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYmV0YUFnZW5jeS5sbSkKCiNjb250cm9sIGZvciBhZ2UKdm9jX1JFX2JldGFBZ2VuY3lBZ2UubG0gPC0gbG0odm9jX3ogfiBiZXRhQWdlbmN5ICsgYWdlLCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYmV0YUFnZW5jeUFnZS5sbSkKCiNjb250cm9sIGZvciBiZXRhIG1hY2hpbmUKdm9jX1JFX2JldGFNYWNoaW5lLmxtIDwtIGxtKHZvY196IH4gYmV0YUFnZW5jeSArIGJldGFNYWNoaW5lLCBkYXRhID0gdm9jX1JFc19STCkKc3VtbWFyeSh2b2NfUkVfYmV0YU1hY2hpbmUubG0pCgoKYGBgCg==